﻿Imports System.Data.SqlClient
Imports System.Security.Cryptography
Imports System
Imports System.Text
Public Class frmLogin

    ' TODO: inserte el código para realizar autenticación personalizada usando el nombre de usuario y la contraseña proporcionada 
    ' (Consulte http://go.microsoft.com/fwlink/?LinkId=35339).  
    ' El objeto principal personalizado se puede adjuntar al objeto principal del subproceso actual como se indica a continuación: 
    '     My.User.CurrentPrincipal = CustomPrincipal
    ' donde CustomPrincipal es la implementación de IPrincipal utilizada para realizar la autenticación. 
    ' Posteriormente, My.User devolverá la información de identidad encapsulada en el objeto CustomPrincipal
    ' como el nombre de usuario, nombre para mostrar, etc.

    Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
        If Me.txtUsuario.Text <> Nothing And Me.txtContrasena.Text <> Nothing Then
            VerificarUsuario()
        Else
            MessageBox.Show("Ingrese todos los datos para hacer login.", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Me.txtUsuario.Focus()
        End If
    End Sub

    Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
        frmPrincipal.NivelSeguridad = 5
        frmPrincipal.Show()
        Me.Dispose()
        Me.Close()
    End Sub

    Private Sub VerificarUsuario()
        Try
            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If

            varConexionMegaStore.Open()
            Dim PassHasheado = getMD5Hash(Me.txtContrasena.Text)
            Dim sqlLogin As String = String.Format("SELECT * FROM OficialCredito WHERE Usuario = '{0}' AND Contrasena = '{1}'", Me.txtUsuario.Text, PassHasheado)

            Dim cmdLogin As New SqlCommand(sqlLogin, varConexionMegaStore)
            Dim readerLogin As SqlDataReader = cmdLogin.ExecuteReader

            If readerLogin.Read Then
                If Me.txtUsuario.Text = readerLogin.Item("Usuario").ToString Then
                    MessageBox.Show(String.Format("Bienvenido {0}.", Me.txtUsuario.Text), varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Information)
                    frmPrincipal.NivelSeguridad = readerLogin.Item("IdNivelSeguridad").ToString
                    frmPrincipal.UsuarioLogin = Me.txtUsuario.Text
                    frmPrincipal.Show()
                    Me.Dispose()
                    Me.Close()
                Else
                    MessageBox.Show("Error de usuario y/o contraseña.", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Me.txtUsuario.Text = Nothing
                    Me.txtContrasena.Text = Nothing

                    Me.txtUsuario.Focus()

                End If
            Else
                MessageBox.Show("Error de usuario y/o contraseña.", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
                Me.txtUsuario.Text = Nothing
                Me.txtContrasena.Text = Nothing

                Me.txtUsuario.Focus()
            End If
        Catch ex As Exception

        End Try
    End Sub

    Private Function getMD5Hash(ByVal input As String) As String
        Dim md5Hasher As MD5 = MD5.Create()
        Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input))
        Dim sBuilder As New StringBuilder()
        Dim i As Integer

        For i = 0 To data.Length - 1
            sBuilder.Append(data(i).ToString("x2"))
        Next i

        Return sBuilder.ToString()

    End Function
End Class
